//=============================================================================================
/**
 * @file	bg_system.h
 * @brief	ＢＧ描画システムプログラム
 *
 * AGB時代から使われているBG回りのシステム群をBMPWINも一緒に固めた状態で
 * 引き継いだライブラリ関数群
 */
//=============================================================================================
#ifndef _BG_SYS_H_
#define _BG_SYS_H_

#undef GLOBAL
#ifdef __BG_SYS_H_GLOBAL__
#define GLOBAL /*	*/
#else
#define GLOBAL extern
#endif


//=============================================================================================
//	型宣言
//=============================================================================================
//メイン・サブ　スクリーン指定
#define GF_BGL_MAIN_DISP	(0)
#define GF_BGL_SUB_DISP		(1)

//モード定義
#define GF_BGL_MODE_TEXT	(0)		// テキスト
#define GF_BGL_MODE_AFFINE	(1)		// アフィン
#define GF_BGL_MODE_256X16	(2)		// アフィン拡張BG

//ＢＧナンバー定義
#define GF_BGL_FRAME0_M	(0)
#define GF_BGL_FRAME1_M	(1)
#define GF_BGL_FRAME2_M	(2)
#define GF_BGL_FRAME3_M	(3)
#define GF_BGL_FRAME0_S	(4)
#define GF_BGL_FRAME1_S	(5)
#define GF_BGL_FRAME2_S	(6)
#define GF_BGL_FRAME3_S	(7)

//ＢＧスクリーンサイズ定義
#define	GF_BGL_SCRSIZ_128x128		( 0 )
#define	GF_BGL_SCRSIZ_256x256		( 1 )
#define	GF_BGL_SCRSIZ_256x512		( 2 )
#define	GF_BGL_SCRSIZ_512x256		( 3 )
#define	GF_BGL_SCRSIZ_512x512		( 4 )
#define	GF_BGL_SCRSIZ_1024x1024		( 5 )

// データ構造定義
#define GF_BGL_DATA_LZH	(0)

//ＢＧスクロールモード定義
#define GF_BGL_SCROLL_X_SET	(0)
#define GF_BGL_SCROLL_X_INC	(1)
#define GF_BGL_SCROLL_X_DEC	(2)
#define GF_BGL_SCROLL_Y_SET	(3)
#define GF_BGL_SCROLL_Y_INC	(4)
#define GF_BGL_SCROLL_Y_DEC	(5)

// 拡縮・回転変更パラメータ
enum {
	GF_BGL_RADION_SET = 0,	// 回転角度変更（指定した値をセット）
	GF_BGL_RADION_INC,		// 回転角度変更（指定した値を＋）
	GF_BGL_RADION_DEC,		// 回転角度変更（指定した値を−）

	GF_BGL_SCALE_X_SET,		// X方向拡縮変更（指定した値をセット）
	GF_BGL_SCALE_X_INC,		// X方向拡縮変更（指定した値を＋）
	GF_BGL_SCALE_X_DEC,		// X方向拡縮変更（指定した値を−）

	GF_BGL_SCALE_Y_SET,		// Y方向拡縮変更（指定した値をセット）
	GF_BGL_SCALE_Y_INC,		// Y方向拡縮変更（指定した値を＋）
	GF_BGL_SCALE_Y_DEC,		// Y方向拡縮変更（指定した値を−）

	GF_BGL_CENTER_X_SET,	// 回転中心X座標変更（指定した値をセット）
	GF_BGL_CENTER_X_INC,	// 回転中心X座標変更（指定した値を＋）
	GF_BGL_CENTER_X_DEC,	// 回転中心X座標変更（指定した値を−）

	GF_BGL_CENTER_Y_SET,	// 回転中心Y座標変更（指定した値をセット）
	GF_BGL_CENTER_Y_INC,	// 回転中心Y座標変更（指定した値を＋）
	GF_BGL_CENTER_Y_DEC,	// 回転中心Y座標変更（指定した値を−）
};

//ＢＧスクリーンデータ埋め尽くし用定義
#define GF_BGL_SCRWRT_PALNL		(16)	//パレット無視（スクリーン上データを引き継ぎ）
#define GF_BGL_SCRWRT_PALIN		(17)	//パレット入り（転送元にパレットデータ込み）

//BGスクリーンデータのバッファモード定義
#define GF_BGL_MODE_1DBUF		(0)		//通常の1次元配列データ
#define GF_BGL_MODE_2DBUF		(1)		//折り返し有りの2次元?配列データ

//ビットマップシフト用定義
#define	GF_BGL_BMPWIN_SHIFT_U	(0)
#define	GF_BGL_BMPWIN_SHIFT_D	(1)
#define	GF_BGL_BMPWIN_SHIFT_L	(2)	//未完成
#define	GF_BGL_BMPWIN_SHIFT_R	(3)	//未完成

//ビットマップ書き込み用定義
#define	GF_BGL_BMPPRT_NOTNUKI	( 0xffff )	// 抜き色指定なし

// 無効ビットマップインデックス値
#define	GF_BGL_BITMAP_NULL	(0xff)

// BitmapWindowのビットモード
enum {
	GF_BGL_BMPWIN_BITMODE_4 = 0,
	GF_BGL_BMPWIN_BITMODE_8 = 1,
};


//--------------------------------------------------------------------
//ＢＧシステム構造体
typedef struct {
	GXDispMode 	dispMode;		//表示モード指定
	GXBGMode	bgMode;			//ＢＧモード指定(メインスクリーン)
	GXBGMode	bgModeSub;		//ＢＧモード指定(サブスクリーン)
	GXBG0As		bg0_2Dor3D;		//ＢＧ０の２Ｄ、３Ｄモード選択
}GF_BGL_SYS_HEADER;

//--------------------------------------------------------------------
//ＢＧコントロール設定構造体
typedef struct {
	int		scrollX;		///< 初期表示Ｘ設定
	int		scrollY;		///< 初期表示Ｙ設定
	u32		scrbufferSiz;	///< スクリーンバッファサイズ( 0 = 使用しない )
	u32		scrbufferOfs;	///< スクリーンバッファオフセット

    u8		screenSize;		///< スクリーンサイズ
    u8		colorMode;		///< カラーモード
    u8		screenBase;		///< スクリーンベースブロック
    u8		charBase;		///< キャラクタベースブロック
    u8		bgExtPltt;		///< ＢＧ拡張パレットスロット選択
	u8		priority;		///< 表示プライオリティー
	u8		areaOver;		///< エリアオーバーフラグ
	u8		dummy;			///< パディング
	BOOL	mosaic;			///< モザイク設定

}GF_BGL_BGCNT_HEADER;

//--------------------------------------------------------------------
//ビットマップ描画データ構造体
typedef struct{
	const u8 *adrs;		///<キャラクタデータの先頭アドレス
	u16	size_x;			///<キャラクタデータのXサイズ
	u16	size_y;			///<キャラクタデータのYサイズ
}BMPPRT_HEADER;

//--------------------------------------------------------------------
///ビットマップリスト用データ構造体
typedef struct{
	u8	frm_num;	///<ウインドウ使用フレーム
	u8	pos_x;		///<ウインドウ領域の左上のX座標（キャラ単位で指定）
	u8	pos_y;		///<ウインドウ領域の左上のY座標（キャラ単位で指定）
	u8	siz_x;		///<ウインドウ領域のXサイズ（キャラ単位で指定）
	u8	siz_y;		///<ウインドウ領域のYサイズ（キャラ単位で指定）
	u8	palnum;		///<ウインドウ領域のパレットナンバー
	u16	chrnum;		///<ウインドウキャラ領域の開始キャラクタナンバー
}BMPWIN_DAT;


typedef struct _GF_BGL_INI	GF_BGL_INI;


///ビットマップウィンドウ設定構造体
typedef struct {
	GF_BGL_INI * ini;		///< BG_SYSTEM構造体ポインタ
	u8		frmnum;			///< フレームNO
	u8		posx;			///< 表示開始X（キャラ単位）
	u8		posy;			///< 表示開始Y（キャラ単位）
	u8		sizx;			///< 横幅表示サイズ（キャラ単位）
	u8		sizy;			///< 縦幅表示サイズ（キャラ単位）
	u8		palnum;			///< 使用パレットNO（0-16)
	u16		chrofs : 15;	///< VRAMオフセット（キャラ単位）
	u16		bitmode : 1;	///< 0:16色、1:256色
	void * chrbuf;			///< キャラクターバッファへのぽいんた
}GF_BGL_BMPWIN;


//--------------------------------------------------------------------
// BG面再設定パラメータ
enum {
	BGL_RESET_COLOR = 0,	///< BG再設定フラグ：カラーモード
	BGL_RESET_SCRBASE,		///< BG再設定フラグ：スクリーンベース
	BGL_RESET_CHRBASE,		///< BG再設定フラグ：キャラベース
	BGL_RESET_MODE,			///< BG再設定フラグ：モード
};


//=============================================================================================
//	プロトタイプ宣言
//=============================================================================================

//=============================================================================================
//=============================================================================================
//	設定関数
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * システムワークエリア取得
 *
 * @param	mode	メモリ取得モード
 *
 * @return	取得したメモリのアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL GF_BGL_INI*  GF_BGL_BglIniAlloc( u32 heapID );

//--------------------------------------------------------------------------------------------
/**
 * ヒープID取得
 *
 * @param	ini		BGLデータ
 *
 * @return	BGLのヒープID
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 GF_BGL_HeapIDGet( GF_BGL_INI * ini );

//--------------------------------------------------------------------------------------------
/**
 * ＢＧモード設定
 *
 * @param	data	ＢＧモード設定データ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void	GF_BGL_InitBG( const GF_BGL_SYS_HEADER* data );

//--------------------------------------------------------------------------------------------
/**
 * ＢＧモード設定（画面ごと）
 *
 * @param	data	ＢＧモード設定データ
 * @param	flg		設定する画面
 *
 * @return	none
 *
 * @li	flg = GF_BGL_MAIN_DISP : メイン画面
 * @li	flg = GF_BGL_SUB_DISP : サブ画面
 */
//--------------------------------------------------------------------------------------------
GLOBAL void	GF_BGL_InitBGDisp( const GF_BGL_SYS_HEADER * data, u8 flg );

//--------------------------------------------------------------------------------------------
/**
 * @brief	ＢＧ面設定拡張バージョン Set時に面をVisible状態にするかを引数で設定できる
 *			Setした瞬間に表示がOnにされるとポケギアが困るのでOn/Offを指定できる拡張バージョンを作った 090613 iwasawa
 *
 * @param	ini			BGLデータ
 * @param	frmnum		ＢＧフレーム番号
 * @param	data		ＢＧコントロールデータ
 * @param	mode		ＢＧモード
 * @param	visible_f	表示・非表示設定
 *
 * @return	none
 *
 * @li	mode = GF_BGL_MODE_TEXT		: テキスト
 * @li	mode = GF_BGL_MODE_AFFINE	: アフィン
 * @li	mode = GF_BGL_MODE_256X16	: アフィン拡張BG
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BGControlSetEx( GF_BGL_INI * ini, u8 frmnum, const GF_BGL_BGCNT_HEADER* data, u8 mode ,u8 visible_f);

//--------------------------------------------------------------------------------------------
/**
 * ＢＧ面設定
 *
 * @param	ini			BGLデータ
 * @param	frmnum		ＢＧフレーム番号
 * @param	data		ＢＧコントロールデータ
 * @param	mode		ＢＧモード
 *
 * @return	none
 *
 * @li	mode = GF_BGL_MODE_TEXT		: テキスト
 * @li	mode = GF_BGL_MODE_AFFINE	: アフィン
 * @li	mode = GF_BGL_MODE_256X16	: アフィン拡張BG
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BGControlSet(
				GF_BGL_INI * ini, u8 frmnum, const GF_BGL_BGCNT_HEADER* data, u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * ＢＧ再面設定
 *
 * @param	ini			BGLデータ
 * @param	frmnum		ＢＧフレーム番号
 * @param	flg			変更パラメータ
 * @param	prm			変更値
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BGControlReset( GF_BGL_INI * ini, u8 frm, u8 flg, u8 prm );

//--------------------------------------------------------------------------------------------
/**
 * GF_BGL_BGControlSetで取得したメモリを開放
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BGControlExit( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * 表示プライオリティ設定
 *
 * @param	frmnum		BGフレーム番号
 * @param	priority	プライオリティ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_PrioritySet( u8 frmnum, u8 priority );

//--------------------------------------------------------------------------------------------
/**
 * 表示ON・OFF設定
 *
 * @param	frmnum		BGフレーム番号
 * @param	visible		VISIBLE_ON or VISIBLE_OFF
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_VisibleSet( u8 frmnum, u8 visible );


//=============================================================================================
//=============================================================================================
//	スクロール関数
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * スクロール処理
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		スクロールモード
 * @param	value		スクロール値
 *
 * @return	none
 *
 * @li	拡縮面が拡縮・回転する場合はGF_BGL_AffineScrollSet(...)を使用すること
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrollSet( GF_BGL_INI * ini, u8 frmnum, u8 mode, int value );

//--------------------------------------------------------------------------------------------
/**
 * 拡縮面の拡縮・回転・スクロール処理
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		スクロールモード
 * @param	value		スクロール値
 * @param	mtx			変換行列
 * @param	cx			回転中心X座標
 * @param	cy			回転中心Y座標
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_AffineScrollSet(
			GF_BGL_INI * ini, u8 frmnum,
			u8 mode, int value, const MtxFx22 * mtx, int cx, int cy );

//--------------------------------------------------------------------------------------------
/**
 * 拡縮・回転処理
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mtx			変換行列
 * @param	cx			回転中心X座標
 * @param	cy			回転中心Y座標
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_AffineSet(
				GF_BGL_INI * ini, u8 frmnum, const MtxFx22 * mtx, int cx, int cy );



//--------------------------------------------------------------------------------------------
/**
 * スクロール値Ｘ取得
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 *
 * @return	int			スクロール値Ｘ
 */
//--------------------------------------------------------------------------------------------
GLOBAL int GF_BGL_ScrollGetX( GF_BGL_INI * ini, u32 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * スクロール値Ｙ取得
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 *
 * @return	int			スクロール値Ｘ
 */
//--------------------------------------------------------------------------------------------
GLOBAL int GF_BGL_ScrollGetY( GF_BGL_INI * ini, u32 frmnum );


//=============================================================================================
//=============================================================================================
//	展開関数
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * データ展開
 *
 * @param	src			展開元
 * @param	dst			展開先
 * @param	datasiz		サイズ
 *
 * @return	none
 *
 * @li	datasiz = GF_BGL_DATA_LZH : 圧縮データ
 */
//--------------------------------------------------------------------------------------------
GLOBAL void	GF_BGL_DataDecord( const void* src, void* dst, u32 datasiz );


//=============================================================================================
//=============================================================================================
//	転送関数
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * フレームに設定されたスクリーンデータを全転送
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadScreenReq( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * 指定データをスクリーンに転送
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	src			転送するデータ
 * @param	datasiz		転送サイズ
 * @param	offs		オフセット
 *
 * @return	none
 *
 * @li	datasiz = GF_BGL_DATA_LZH : 圧縮データ
 *
 *	圧縮されたデータは解凍場所にini->bgsys[frmnum].screen_bufを使用するため
 *	ini->bgsys[frmnum].screen_bufにデータがセットされるが、非圧縮の場合は、
 *	セットされないので、注意すること。
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadScreen(
				GF_BGL_INI * ini, u8 frmnum, const void* src, u32 datasiz, u32 offs );

//--------------------------------------------------------------------------------------------
/**
 * 指定データをスクリーンに転送（ファイル参照）
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	path		ファイルのパス名
 * @param	offs		オフセット
 *
 * @return	none
 *
 *	圧縮未対応
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadScreenFile( GF_BGL_INI * ini, u8 frmnum, const char * path, u32 offs );

//--------------------------------------------------------------------------------------------
/**
 *	スクリーンデータをバッファにコピー
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 * @param	dat			指定データ
 * @param	datasizpx	データサイズ
 *
 * @retrn	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScreenBufSet( GF_BGL_INI * ini, u8 frmnum, const void * dat, u32 datasiz );

//--------------------------------------------------------------------------------------------
/**
 * キャラクター転送
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	src			転送するデータ
 * @param	datasiz		転送サイズ
 * @param	offs		オフセット
 *
 * @return	none
 *
 * @li	datasiz = GF_BGL_DATA_LZH : 圧縮データ
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadCharacter(
				GF_BGL_INI * ini, u8 frmnum, const void * src, u32 datasiz, u32 offs );

//--------------------------------------------------------------------------------------------
/**
 * キャラクター転送（ファイル参照）
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	src			転送するデータ
 * @param	datasiz		転送サイズ
 * @param	offs		オフセット
 *
 * @return	none
 *
 *	圧縮未対応
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadCharacterFile(
					GF_BGL_INI * ini, u8 frmnum, const char * path, u32 offs );

//--------------------------------------------------------------------------------------------
/**
 * ０クリアされたキャラをセット
 *
 * @param	frmnum		BGフレーム番号
 * @param	datasiz		転送サイズ
 * @param	offs		オフセット
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ClearCharSet( u8 frmnum, u32 datasiz, u32 offs, u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * 指定値でクリアされたキャラをセット
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	clear_code	クリアコード
 * @param	charcnt		クリアするキャラ数
 * @param	offs		キャラ領域先頭からのオフセット（キャラ数）
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_CharFill(
				GF_BGL_INI * ini, u32 frmnum, u32 clear_code, u32 charcnt, u32 offs );

//--------------------------------------------------------------------------------------------
/**
 * パレット転送
 *
 * @param	frmnum		BGフレーム番号
 * @param	buf			パレットデータ
 * @param	siz			転送サイズ（バイト単位）
 * @param	ofs			オフセット（バイト単位）
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_PaletteSet( u8 frmnum, void * buf, u16 siz, u16 ofs );

//--------------------------------------------------------------------------------------------
/**
 * パレットクリア転送
 *
 * @param	frmnum		BGフレーム番号
 * @param	siz			転送サイズ（バイト単位）
 * @param	ofs			オフセット（バイト単位）
 * @param	heap		テンポラリ領域を確保するヒープID
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ClearPaletteSet( u8 frmnum, u16 siz, u16 ofs ,int heap);

//--------------------------------------------------------------------------------------------
/**
 * バックグラウンドカラー転送（パレット０のカラー指定）
 *
 * @param	frmnum		BGフレーム番号
 * @param	col			カラー
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BackGroundColorSet( u8 frmnum, u16 col );


//=============================================================================================
//=============================================================================================
//	スクリーン関連
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * スクリーンデータ書き込み
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 * @param	buf			書き込むデータ
 * @param	px			書き込み開始Ｘ座標
 * @param	py			書き込み開始Ｙ座標
 * @param	sx			書き込みＸサイズ
 * @param	sy			書き込みＹサイズ
 *
 * @retrn	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrWrite(
				GF_BGL_INI * ini, u8 frmnum, const void * buf, u8 px, u8 py, u8 sx, u8 sy );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンデータ書き込み（拡張版）
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 * @param	write_px	書き込み開始Ｘ座標
 * @param	write_px	書き込み開始Ｙ座標
 * @param	write_sx	書き込みＸサイズ
 * @param	write_sy	書き込みＹサイズ
 * @param	buf			読み込みデータ
 * @param	buf_px		読み込み開始Ｘ座標
 * @param	buf_py		読み込み開始Ｙ座標
 * @param	buf_sx		読み込みデータＸサイズ（write_sx,syとは違い、読み込みデータの
 * @param	buf_sy		読み込みデータＹサイズ　全体の大きさそのものを代入する）
 *
 * @retrn	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrWriteExpand(
				GF_BGL_INI * ini, u8 frmnum, u8 write_px, u8 write_py, u8 write_sx, u8 write_sy,
				const void * buf, u8 buf_px, u8 buf_py, u8 buf_sx, u8 buf_sy );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンデータ書き込み(折り返しありデータ版)
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 * @param	write_px	書き込み開始Ｘ座標
 * @param	write_px	書き込み開始Ｙ座標
 * @param	write_sx	書き込みＸサイズ
 * @param	write_sy	書き込みＹサイズ
 * @param	buf			読み込みデータ
 * @param	buf_px		読み込み開始Ｘ座標
 * @param	buf_py		読み込み開始Ｙ座標
 * @param	buf_sx		読み込みデータＸサイズ（write_sx,syとは違い、読み込みデータの
 * @param	buf_sy		読み込みデータＹサイズ　全体の大きさそのものを代入する）
 *
 * @retrn	none
 *
 * @li	折り返し有り1x1〜64x64キャラのフリーサイズスクリーンデータの矩形書き込み
 */
//--------------------------------------------------------------------------------------------
void GF_BGL_ScrWriteFree(
				GF_BGL_INI * ini, u8 frmnum, u8 write_px, u8 write_py, u8 write_sx, u8 write_sy,
				const void * buf, u8 buf_px, u8 buf_py, u8 buf_sx, u8 buf_sy );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンデータバッファ埋め尽くし
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム
 * @param	dat			指定データ
 * @param	px			書き込み開始Ｘ座標
 * @param	py			書き込み開始Ｙ座標
 * @param	sx			書き込みＸサイズ
 * @param	sy			書き込みＹサイズ
 * @param	mode		パレット番号など
 *
 * @retrn	none
 *
 * @li	mode = GF_BGL_SCRWRT_PALNL : 現在のスクリーンのパレットを引き継ぐ
 * @li	mode = GF_BGL_SCRWRT_PALIN : datにパレットデータを含む
 * @li	mode = 0 〜 15 : パレット番号
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrFill(
				GF_BGL_INI * ini, u8 frmnum, u16 dat, u8 px, u8 py, u8 sx, u8 sy, u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * 指定フレームのスクリーンの指定位置のパレットを変更する
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param	px		開始X位置
 * @param	py		開始Y位置
 * @param	sx		Xサイズ
 * @param	sy		Yサイズ
 * @param	pal		パレット番号
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrPalChange(
				GF_BGL_INI * ini, u8 frmnum, u8 px, u8 py, u8 sx, u8 sy, u8 pal );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンバッファをクリアして転送
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrClear( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンバッファを指定コードでクリアして転送
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param   clear_code	クリアコード
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrClearCode( GF_BGL_INI * ini, u8 frmnum, u16 clear_code );

//--------------------------------------------------------------------------------------------
/**
 * スクリーンバッファを指定コードでクリアして転送リクエスト
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param   clear_code	クリアコード
 *
 * @return	none
 *
 * @li	転送はVBlankで
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrClearCodeVReq( GF_BGL_INI * ini, u8 frmnum, u16 clear_code );


//=============================================================================================
//=============================================================================================
//	キャラクター関連
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * キャラデータを取得
 *
 * @param	frmnum	BGフレーム番号
 *
 * @return	キャラデータのアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL void * GF_BGL_CgxGet( u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * 4bitのキャラデータを8bitに変換する（変換先指定）
 *
 * @param	chr			変換元データ（4bitキャラ）
 * @param	chr_size	変換元データのサイズ
 * @param	buf			変換先
 * @param	pal_ofs		元パレット番号 ( 0 〜 16 )
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_4BitCgxChange8BitMain( const u8 * chr, u32 chr_size, u8 * buf, u8 pal_ofs );

//--------------------------------------------------------------------------------------------
/**
 * 4bitのキャラデータを8bitに変換する（変換先取得）
 *
 * @param	chr			変換元データ（4bitキャラ）
 * @param	chr_size	変換元データのサイズ
 * @param	pal_ofs		元パレット番号 ( 0 〜 16 )
 * @param	heap		ヒープID
 *
 * @return	取得したメモリのアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL void * GF_BGL_4BitCgxChange8Bit( const u8 * chr, u32 chr_size, u8 pal_ofs, u32 heap );


//=============================================================================================
//=============================================================================================
//	BGLステータス取得
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（スクリーンバッファアドレス）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	スクリーンバッファアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL void * GF_BGL_ScreenAdrsGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（スクリーンバッファサイズ）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	スクリーンバッファサイズ
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 GF_BGL_ScreenSizGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（スクリーンタイプ取得）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	GF_BGL_SCRSIZ_128x128 等
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 GF_BGL_ScreenTypeGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（スクロールカウンタX）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	スクロールカウンタX
 */
//--------------------------------------------------------------------------------------------
GLOBAL int GF_BGL_ScreenScrollXGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（スクロールカウンタY）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	スクロールカウンタY
 */
//--------------------------------------------------------------------------------------------
GLOBAL int GF_BGL_ScreenScrollYGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（カラーモード）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	カラーモード
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_ScreenColorModeGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（回転角度）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	回転角度
 */
//--------------------------------------------------------------------------------------------
GLOBAL u16 GF_BGL_RadianGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（X方向の拡縮パラメータ）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	X方向の拡縮パラメータ
 */
//--------------------------------------------------------------------------------------------
GLOBAL fx32 GF_BGL_ScaleXGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（Y方向の拡縮パラメータ）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	Y方向の拡縮パラメータ
 */
//--------------------------------------------------------------------------------------------
GLOBAL fx32 GF_BGL_ScaleYGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（回転中心X座標）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	回転中心X座標
 */
//--------------------------------------------------------------------------------------------
GLOBAL GF_BGL_CenterXGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGLステータス取得（回転中心Y座標）
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	回転中心Y座標
 */
//--------------------------------------------------------------------------------------------
GLOBAL int GF_BGL_CenterYGet( GF_BGL_INI * ini, u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * BGプライオリティ取得
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 *
 * @return	プライオリティ
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_PriorityGet( GF_BGL_INI * ini, u8 frm );


//=============================================================================================
//=============================================================================================
//	ビットマップ関連
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 読み込みと書き込みのアドレスと範囲を指定してキャラを描画(透明色指定あり）
 *
 * @param	src			読み込み元キャラデータヘッダー構造体ポインタ
 * @param	dest		書き込み先キャラデータヘッダー構造体ポインタ
 * @param	pos_sx		読み込み元読み込み開始X座標
 * @param	pos_sy		読み込み元読み込み開始Y座標
 * @param	pos_dx		書き込み先書き込み開始X座標
 * @param	pos_dy		書き込み先書き込み開始Y座標
 * @param	size_x		描画範囲Xサイズ
 * @param	size_y		描画範囲Yサイズ
 * @param	nuki_col	透明色指定（0〜15 0xff:透明色指定なし）
 *
 * @return	none
 *
 * @li	１６色用
 */
//--------------------------------------------------------------------------------------------
GLOBAL void	GF_BMP_PrintMain(
				const BMPPRT_HEADER * src, const BMPPRT_HEADER * dest,
				u16 pos_sx, u16 pos_sy, u16 pos_dx, u16 pos_dy,
				u16 size_x, u16 size_y, u16 nuki_col );

//--------------------------------------------------------------------------------------------
/**
 * 読み込みと書き込みのアドレスと範囲を指定してキャラを描画(透明色指定あり）
 *
 * @param	src			読み込み元キャラデータヘッダー構造体ポインタ
 * @param	dest		書き込み先キャラデータヘッダー構造体ポインタ
 * @param	pos_sx		読み込み元読み込み開始X座標
 * @param	pos_sy		読み込み元読み込み開始Y座標
 * @param	pos_dx		書き込み先書き込み開始X座標
 * @param	pos_dy		書き込み先書き込み開始Y座標
 * @param	size_x		描画範囲Xサイズ
 * @param	size_y		描画範囲Yサイズ
 * @param	nuki_col	透明色指定（0〜15 0xff:透明色指定なし）
 *
 * @return	none
 *
 * @li	２５６色用
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BMP_PrintMain256(
				const BMPPRT_HEADER * src, const BMPPRT_HEADER * dest,
				u16 pos_sx, u16 pos_sy, u16 pos_dx, u16 pos_dy,
				u16 size_x, u16 size_y, u16 nuki_col );

//--------------------------------------------------------------------------------------------
/**
 * 範囲を指定して指定された色コードで塗りつぶし
 *
 * @param	dest		書き込み先キャラデータヘッダー構造体ポインタ
 * @param	pos_dx		書き込み先書き込み開始X座標
 * @param	pos_dy		書き込み先書き込み開始Y座標
 * @param	size_x		描画範囲Xサイズ
 * @param	size_y		描画範囲Yサイズ
 * @param	col_code	塗りつぶし色コード
 *
 * @return	none
 *
 * @li	１６色用
 */
//--------------------------------------------------------------------------------------------
GLOBAL void	GF_BGL_BmpFill(
				const BMPPRT_HEADER *dest,
				u16 pos_dx,u16 pos_dy,u16 size_x,u16 size_y,u8 col_code);

//--------------------------------------------------------------------------------------------
/**
 * 範囲を指定して指定された色コードで塗りつぶし
 *
 * @param	dest		書き込み先キャラデータヘッダー構造体ポインタ
 * @param	pos_dx		書き込み先書き込み開始X座標
 * @param	pos_dy		書き込み先書き込み開始Y座標
 * @param	size_x		描画範囲Xサイズ
 * @param	size_y		描画範囲Yサイズ
 * @param	col_code	塗りつぶし色コード
 *
 * @return	none
 *
 * @li	２５６色用
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpFill256(
			const BMPPRT_HEADER * dest,
			u16 pos_dx, u16 pos_dy, u16 size_x, u16 size_y, u8 col_code );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップデータ確保
 *
 * @param	heapID	ヒープＩＤ
 * @param	num		確保するBMPウィンドウの数
 *
 * @return	確保したデータのアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL GF_BGL_BMPWIN * GF_BGL_BmpWinAllocGet( u32 heapID, u8 num );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップデータ初期化
 *
 * @param	wk		BMPデータ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinInit( GF_BGL_BMPWIN * wk );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ登録チェック
 *
 * @param	win		BMPデータ
 *
 * @retval	"TRUE = 登録済み"
 * @retval	"FALSE = 未登録"
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinAddCheck( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ追加
 *
 * @param	ini		BGLデータ
 * @param	win		BMPデータ格納場所
 * @param	frmnum	BGフレーム番号
 * @param	posx	X座標（キャラ単位）
 * @param	posy	Y座標（キャラ単位）
 * @param	sizx	Xサイズ（キャラ単位）
 * @param	sizy	Xサイズ（キャラ単位）
 * @param	palnum	使用パレット番号
 * @param	chrofs	使用CGXオフセット
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinAdd(
				GF_BGL_INI * ini, GF_BGL_BMPWIN * win, u8 frmnum,
				u8 posx, u8 posy, u8 sizx, u8 sizy, u8 palnum, u16 chrofs );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ追加（OBJ用にキャラ領域だけを確保）
 *
 * @param	ini		BGLデータ
 * @param	win		BMPデータ格納場所
 * @param	sizx	Xサイズ（キャラ単位）
 * @param	sizy	Xサイズ（キャラ単位）
 * @param	chrofs	使用CGXオフセット
 * @param   fill_color	埋め尽くしカラー番号(0〜0xf)
 *
 * @return	none
 *
 * 使用上の注意：
 * スクリーン領域を確保しないため、frmnumメンバは0xFFで初期化されます。
 * よって、内部でfrmnumメンバを参照するBmpWin系関数の使用ができません。
 *
 * 使用できる関数：
 *	void GF_BGL_BmpWinDel( GF_BGL_BMPWIN * win )
 *	void GF_BGL_BmpWinObjDataFill( GF_BGL_BMPWIN * win, u8 col )
 *	void GF_BGL_BmpWinFree( GF_BGL_BMPWIN * win, u8 num )
 *	void GF_BGL_BmpWinObjDataFill( GF_BGL_BMPWIN * win, u8 col )
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinObjAdd(GF_BGL_INI * ini, GF_BGL_BMPWIN * win, u8 sizx, u8 sizy,
				u16 chrofs, u8 fill_color );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ追加（データ指定）
 *
 * @param	ini		BGLデータ
 * @param	win		BMPデータ格納場所
 * @param	dat		BMPWIN_DAT構造体型データへのポインタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinAddEx(
				GF_BGL_INI * ini, GF_BGL_BMPWIN * win, const BMPWIN_DAT * dat );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ削除
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinDel( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ削除（BMPデータも開放）
 *
 * @param	win		BMPデータ
 * @param	num		個数
 *
 * @return	none
 *
 *	GF_BGL_BmpWinAllocGet()で確保した場合に使用して下さい
 *
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinFree( GF_BGL_BMPWIN * win, u8 num );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ表示（スクリーン、キャラ転送）
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinOn( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ表示（スクリーン転送リクエスト、キャラ転送）
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinOnVReq( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ウィンドウ領域スクリーンを関連BG内部バッファに作成する
 *
 * @param	win		BMPデータ格納場所
 *
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinMakeScrn( GF_BGL_BMPWIN* win );

//------------------------------------------------------------------
/**
 * Window領域スクリーンを関連BG内部バッファに作成する
 * （サイズ指定可。BitmapWindow作成時よりも小さい領域のスクリーン作成が可能。大きいのはＮＧ。）
 *
 * @param   win			BitmapWindow へのポインタ
 * @param   width		スクリーン作成領域の幅（キャラ単位）
 * @param   height		スクリーン作成領域の高さ（キャラ単位）
 *
 */
//------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinMakeScrnLimited( GF_BGL_BMPWIN* win, u32 width, u32 height );

//--------------------------------------------------------------------------------------------
/**
 * 関連BG内部バッファのウィンドウ領域スクリーンをクリアする
 *
 * @param	win		BMPデータ格納場所
 *
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinClearScrn( GF_BGL_BMPWIN* win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ表示（キャラ転送のみ）
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinCgxOn( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ非表示
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinOff( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップ非表示リクエスト
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinOffVReq( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * 指定カラーで全体を塗りつぶす
 *
 * @param	win		BMPデータ格納場所
 * @param	col		カラー
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinDataFill( GF_BGL_BMPWIN * win, u8 col );

//--------------------------------------------------------------------------------------------
/**
 * 指定カラーで全体を塗りつぶす(ObjAdd版 OBJ用にキャラ領域だけを確保。4bit専用)
 *
 * @param	win		BMPデータ格納場所
 * @param	col		カラーナンバー
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinObjDataFill( GF_BGL_BMPWIN * win, u8 col );


//--------------------------------------------------------------------------------------------
/**
 * ビットマップ描画
 *
 * @param	win		BMPデータ格納場所
 * @param	src		ビットマップ表示データポインタ
 * @param	src_x	ビットマップ表示開始位置Ｘ
 * @param	src_y	ビットマップ表示開始位置Ｙ
 * @param	src_dx	ビットマップデータサイズＸ
 * @param	src_dy	ビットマップデータサイズＸ
 * @param	win_x	ウインドウ表示開始位置Ｘ
 * @param	win_y	ウインドウ表示開始位置Ｙ
 * @param	win_dx	ウインドウデータサイズＸ
 * @param	win_dy	ウインドウデータサイズＹ
 *
 * @retval	なし
 *
 * ビットマップデータの書き込みを実行
 * ビットマップデータの切り取りを可能にしたもの
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinPrint(
				GF_BGL_BMPWIN * win, void * src,
				u16 src_x, u16 src_y, u16 src_dx, u16 src_dy,
				u16 win_x, u16 win_y, u16 win_dx, u16 win_dy );

//--------------------------------------------------------------------------------------------
/**
 *	ビットマップ描画（拡張版）
 *
 * @param	win		BMPデータ格納場所
 * @param	src		ビットマップ表示データポインタ
 * @param	src_x	ビットマップ表示開始位置Ｘ
 * @param	src_y	ビットマップ表示開始位置Ｙ
 * @param	src_dx	ビットマップデータサイズＸ
 * @param	src_dy	ビットマップデータサイズＸ
 * @param	win_x	ウインドウ表示開始位置Ｘ
 * @param	win_y	ウインドウ表示開始位置Ｙ
 * @param	win_dx	ウインドウデータサイズＸ
 * @param	win_dy	ウインドウデータサイズＹ
 * @param	nuki	透明色指定（0〜15 0xff:透明色指定なし）
 *
 * @retval	なし
 *
 * ビットマップデータの書き込みを実行
 * ビットマップデータの切り取りを可能にしたもの
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinPrintEx(
				GF_BGL_BMPWIN * win, void * src,
				u16 src_x, u16 src_y, u16 src_dx, u16 src_dy,
				u16 win_x, u16 win_y, u16 win_dx, u16 win_dy, u16 nuki );

//--------------------------------------------------------------------------------------------
/**
 * 指定範囲を塗りつぶす
 *
 * @param	win			BMPデータ
 * @param	col			塗りつぶしカラー
 * @param	px			開始X座標
 * @param	py			開始Y座標
 * @param	sx			Xサイズ
 * @param	sy			Yサイズ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinFill( GF_BGL_BMPWIN * win, u8 col, u16 px, u16 py, u16 sx, u16 sy );

//---------------------------------------------------------------------------------------------
/**
 * 文字表示専用処理効率アップ版
 *
 * @param	win		BMPデータ格納場所
 * @param	src		キャラデータ
 * @param	ssx		フォントXサイズ
 * @param	ssy		フォントYサイズ
 * @param	wx		書き込みX座標
 * @param	wy		書き込みY座標
 *
 * @return	none
 */
//---------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinPrintMsg(
				GF_BGL_BMPWIN * win, u8 * src,
				u16 ssx, u16 ssy, u16 wx, u16 wy );
GLOBAL void GF_BGL_BmpWinPrintMsgWide(
				GF_BGL_BMPWIN * win, const u8 * src,
				u16 ssx, u16 ssy, u16 wx, u16 wy, u16 tbl );

//--------------------------------------------------------------------------------------------
/**
 * ビットマップウインドウデータシフト
 *
 * @param	win		BMPデータ格納場所
 * @param	direct	方向
 * @param	offset	シフト幅
 * @param	data	空白になった領域を埋めるデータ
 *
 * @return	none
 *
 * ビットマップデータ(全領域)のシフトを実行
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinShift( GF_BGL_BMPWIN * win, u8 direct, u8 offset, u8 data );


//=============================================================================================
//=============================================================================================
//	BMPデータ操作
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：BGLデータ
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->ini
 */
//--------------------------------------------------------------------------------------------
GLOBAL GF_BGL_INI * GF_BGL_BmpWinGet_BglIni( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：BGフレーム番号
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->frmnum
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinGet_Frame( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：Xサイズ
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->sizx
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinGet_SizeX( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：Yサイズ
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->sizy
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinGet_SizeY( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：X座標
 *
 * @param	win		BMPデータ格納場所
 * @param	index	ビットマップ使用設定ヘッダINDEX
 *
 * @return	win->posx
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinGet_PosX( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：Y座標
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->posy
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_BmpWinGet_PosY( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ取得：キャラ番号
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	win->chrofs
 */
//--------------------------------------------------------------------------------------------
GLOBAL u16 GF_BGL_BmpWinGet_Chrofs( GF_BGL_BMPWIN * win );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ設定：X座標
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinSet_PosX( GF_BGL_BMPWIN * win, u8 px );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ設定：Y座標
 *
 * @param	win		BMPデータ格納場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinSet_PosY( GF_BGL_BMPWIN * win, u8 py );

//--------------------------------------------------------------------------------------------
/**
 * BMPデータ設定：パレット番号
 *
 * @param	win		BMPデータ格納場所
 * @param   palnum	パレット番号
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_BmpWinSet_Pal( GF_BGL_BMPWIN * win, u8 palnum );


//=============================================================================================
//=============================================================================================
//	NITRO-CHARACTERデータ展開処理
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * NITRO-CHARACTERのキャラデータを読み込む
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param	path	ファイルパス
 * @param	offs	オフセット（キャラ単位）
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_NTRCHR_CharLoad(
				GF_BGL_INI * ini, u8 frmnum, const char * path, u32 offs );
GLOBAL void GF_BGL_NTRCHR_CharLoadEx(
				GF_BGL_INI * ini, u8 frmnum, const char * path, u32 offs, u32 size );

//--------------------------------------------------------------------------------------------
/**
 * NITRO-CHARACTERのキャラデータを取得
 *
 * @param	buf		展開用バッファ（内部でメモリ確保）
 * @param	mode	指定ヒープ領域定義
 * @param	path	ファイルパス
 *
 * @return	キャラデータの構造体
 */
//--------------------------------------------------------------------------------------------
GLOBAL NNSG2dCharacterData * GF_BGL_NTRCHR_CharGet( void ** buf, int mode, const char * path );

//--------------------------------------------------------------------------------------------
/**
 * NITRO-CHARACTERのパレットデータを展開
 *
 * @param	mem		展開場所
 * @param	mode	指定ヒープ領域定義
 * @param	path	ファイルパス
 *
 * @return	パレットデータ
 *
 * @li		pal->pRawData = パレットデータ
 * @li		pal->szByte   = サイズ
 */
//--------------------------------------------------------------------------------------------
GLOBAL NNSG2dPaletteData * GF_BGL_NTRCHR_PalLoad( void ** mem, int mode, const char * path );

//--------------------------------------------------------------------------------------------
/**
 * NITRO-CHARACTERのスクリーンデータを読み込む
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param	path	ファイルパス
 * @param	offs	オフセット（キャラ単位）
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_NTRCHR_ScrnLoad(
				GF_BGL_INI * ini, u8 frmnum, const char * path, u32 offs );


//=============================================================================================
//=============================================================================================
//	VBlank関連
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * VBlank転送
 *
 * @param	ini		BGLデータ
 *
 * @return	none
 *
 * @li	VBlank内で呼んで下さい
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_VBlankFunc( GF_BGL_INI * ini );

//--------------------------------------------------------------------------------------------
/**
 * スクリーン転送リクエスト ( VBlank )
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 *
 * @return	none
 *
 * @li	VBlank内でGF_BGL_VBlankFunc(...)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_LoadScreenV_Req( GF_BGL_INI * ini , u8 frmnum );

//--------------------------------------------------------------------------------------------
/**
 * スクロールリクエスト
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		スクロールモード
 * @param	value		スクロール値
 *
 * @return	none
 *
 * @li	VBlank内でGF_BGL_VBlankFunc(...)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScrollReq( GF_BGL_INI * ini, u8 frmnum, u8 mode, int value );

//--------------------------------------------------------------------------------------------
/**
 * 回転角度変更リクエスト
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		角度変更モード
 * @param	value		回転値
 *
 * @return	none
 *
 * @li	VBlank内でGF_BGL_VBlankFunc(...)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_RadianSetReq( GF_BGL_INI * ini, u8 frmnum, u8 mode, u16 value );

//--------------------------------------------------------------------------------------------
/**
 * 拡縮変更リクエスト
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		拡縮変更モード
 * @param	value		変更値
 *
 * @return	none
 *
 * @li	VBlank内でGF_BGL_VBlankFunc(...)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_ScaleSetReq( GF_BGL_INI * ini, u8 frmnum, u8 mode, fx32 value );

//--------------------------------------------------------------------------------------------
/**
 * 回転中心座標変更リクエスト
 *
 * @param	ini			BGLデータ
 * @param	frmnum		BGフレーム番号
 * @param	mode		変更モード
 * @param	value		変更値
 *
 * @return	none
 *
 * @li	VBlank内でGF_BGL_VBlankFunc(...)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_BGL_RotateCenterSetReq( GF_BGL_INI * ini, u8 frmnum, u8 mode, int value );


//=============================================================================================
//=============================================================================================
//	その他
//=============================================================================================
//=============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 指定座標のドットをチェック
 *
 * @param	ini		BGLデータ
 * @param	frmnum	BGフレーム番号
 * @param	px		X座標
 * @param	py		Y座標
 * @param	pat		判定データ
 *
 * @retval	"TRUE = 判定データ(pat)にあり"
 * @retval	"FALSE = 判定データ(pat)になし"
 *
 * @li	１６色の場合、patはビットでチェック
 *			例）*pat = 0xfffd;
 *				カラー0と1の場合、FALSEが返る
 *
 * @li	２５６色の場合、patの最後に0xffffを付加
 *			例）pat[] = { 88, 124, 223, 0xffff };
 *				カラー88, 124, 223以外はFALSEが返る
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 GF_BGL_DotCheck( GF_BGL_INI * ini, u8 frmnum, u16 px, u16 py, u16 * pat );



#undef GLOBAL
#endif